/**
 * \file SSymboles.h
 * \author Catalin BLAJ
 * \author Vincent JACQUEMIN
 * \date 18 Octobre 2013
 *
 * Fichier header SSymboles.h pour le programme du Sudoku.
 */


#ifndef SSYMBOLES_H
#define SSYMBOLES_H

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <assert.h>

#include "SCase.h"

/*----------------
|   STRUCTURE    |
----------------*/

/**
* \struct SSymboles
* \brief Ensemble des symboles du Sudoku.
*
* Cette structure représente l'ensemble des symboles nécessaires pour jouer au Sudoku.
*/
typedef struct SSymboles
{
    /** Racine carrée de la longueur de la chaîne ensembleSymboles. */
	unsigned char type;
	/** Chaîne contenant les symboles. */
    char* ensembleSymboles;
} SSymboles;



/*-------------------
|     FONCTIONS     |
-------------------*/

/* INITIALISATION - TESTAMENT */

/**
 * \brief Initialiseur de SSymboles.
 * \param ensembleSymboles : Chaîne d'initialisation contenant les symbôles de l'ensemble (donnée)
 * \return Renvoie la structure symbole initialisée.
 *
 * Initialiseur de SSymboles.
 */
SSymboles* SS_initialiser(char* ensembleSymboles);

/**
 * \brief Initialiseur de SSymboles par type.
 * \param type : Type de Sudoku (donnée).
 * \return Renvoie la structure symbole initialisée.
 *
 * Initialiseur de Symboles.
 */
SSymboles* SS_initialiserParType(unsigned char type);

/**
 * \brief Testament de SSymboles.
 * \param symboles : Symboles que l'on veut détruire (donnée-résultat).
 *
 *  Testament de SSymboles.
 */
void SS_testament(SSymboles* symboles);


/* ACCESSEURS */

/**
 * \brief Accesseur du type de Sudoku.
 * \param symboles : Symboles utilisés pour la partie (donnée).
 * \return Renvoie le type de Sudoku.
 *
 * Cette fonction renvoie le type de Sudoku.
 */
unsigned char SS_getType(const SSymboles* symboles);

/**
 * \brief Accesseur des symboles de l'ensemble.
 * \param indice : Indice du symbole dans l'ensemble (donnée).
 * \return Renvoie le caractère à l'emplacement indice (donnée).
 *
 * Cette fonction renvoie le caractère à l'emplacement indice du champ ensembleSymboles.
 */
char SS_getSymbole(const SSymboles* symboles, unsigned short indice);

/**
 * \brief Accesseur de l'indice d'un symbole dans l'ensemble.
 * \param symbole : Caractère dont on doit chercher l'indice (donnée).
 * \return Renvoie l'indice du symbole recherché ou -1 si le symbôle n'y est pas.
 *
 * Cette fonction renvoie l'indice du caractère en paramètre.
 */
short SS_getIndice(const SSymboles* symboles, char caractere);

#endif
